﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using rent_car.Manejadores;

namespace rent_car.Gui
{
    public partial class FormNuevaCiudad : Form
    {

        public FormNuevaCiudad()
        {
            InitializeComponent();
            manejadorDeCiudades = ManejadorDeCiudades.getInstancia();
            manejadorDePaises = ManejadorDePaises.getInstancia();
            validador = new ValidadorDeFormularios();;
            cargarCbPaises();
            cargarGvCiudades();
        }

        private void cargarCbPaises()
        {
            cbPaises.DataSource = null;
            cbPaises.DataSource = manejadorDePaises.getObject();
        }

        private void cargarGvCiudades()
        {
            gvCiudades.DataSource = null;
            gvCiudades.DataSource = manejadorDeCiudades.getObject();
        }
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if(validarCampos())
            {
                if (!modificado)
                {
                    agregarCiudad();
                    cargarGvCiudades();
                    MessageBox.Show(null, "Ciudad agregada con éxito", "Información", MessageBoxButtons.OK);
                }
                else
                {
                    modificarCiudad();
                    cargarGvCiudades();
                    MessageBox.Show(null, "Ciudad modificada con éxito", "Información", MessageBoxButtons.OK);
                }
            }
        }

        private void agregarCiudad()
        {
            paise pais = (paise)cbPaises.SelectedItem;
            ciudade ciudadeNueva = new ciudade();
            ciudadeNueva.pais_id = pais.pais_id;
            ciudadeNueva.nombre = txtCiudad.Text;
            ciudadeNueva.paise = pais;
            manejadorDeCiudades.agregar(ciudadeNueva);
        }

        private void modificarCiudad()
        { 
            if(modificado)
            {
                ciudadadModificada = (ciudade)gvCiudades.CurrentRow.DataBoundItem;
                paise pais = (paise)cbPaises.SelectedItem;
                ciudadadModificada.pais_id = pais.pais_id;
                ciudadadModificada.nombre = txtCiudad.Text;
                ciudadadModificada.paise = pais;
                manejadorDeCiudades.modificar(ciudadadModificada);
            }
        }

        private bool validarCampos()
        {
            return validador.validarCamposEspecificos(txtCiudad, cbPaises);
        }

        private void cargarDatos()
        {
            if (gvCiudades.SelectedRows.Count != 0)
            {
                ciudade ciudad = (ciudade)gvCiudades.CurrentRow.DataBoundItem;
                txtCiudad.Text = ciudad.nombre;
                cbPaises.SelectedIndex = manejadorDeCiudades.getItem(ciudad.paise.pais_id - 1);
                modificado = true;
            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            cargarDatos();
        }      

        private void gvCiudades_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            cargarDatos();
        }
 
        private void btnEliminar_Click(object sender, EventArgs e)
        {
            eliminarCiudad();
            MessageBox.Show(null, "Ciudad eliminada con éxito", "Información", MessageBoxButtons.OK);
        }

        private void eliminarCiudad()
        {
            ciudade ciudadEliminar = (ciudade)gvCiudades.CurrentRow.DataBoundItem;
            manejadorDeCiudades.eliminar(ciudadEliminar.ciudad_id);
            cargarGvCiudades();
        }
        private ManejadorDeCiudades manejadorDeCiudades = null;
        private ManejadorDePaises manejadorDePaises = null;
        private ValidadorDeFormularios validador = null;
        private ciudade ciudadadModificada = null;
        private bool modificado = false;
    }
}
